/*
    文件内容: 封装网络地址类
    文件名: InetAddress.cpp
    作者: 中国好青年(码农论坛)
    时间: 2024/9/5

*/

#include "InetAddress.h"

/* 
    函数名: InetAddress(const std::string ip, const uint16_t port)
    返回值: 无
    参  数: const string &ip,IP地址 const uint16_t port,端口号
    函数作用: InetAddress构造函数  
*/
InetAddress::InetAddress(const std::string &ip, const uint16_t port)
{
    addr_.sin_family = AF_INET;
    addr_.sin_addr.s_addr = inet_addr(ip.c_str());
    addr_.sin_port = htons(port);
}

/* 
    函数名: InetAddress(const struct sockaddr_in addr)
    返回值: 无
    参  数: const struct sockaddr_in addr,网络结构体
    函数作用: InetAddress构造函数  
*/
InetAddress::InetAddress(const struct sockaddr_in addr):addr_(addr)
{

}

/* 
    函数名: InetAddress()
    返回值: 无
    参  数: 无
    函数作用: InetAddress空构造函数  
*/
InetAddress::InetAddress(){

}

/* 
    函数名: ~InetAddress()
    返回值: 无
    参  数: 无
    函数作用: InetAddress析构函数
*/
InetAddress::~InetAddress()
{

}

/* 
    函数名: ip()
    返回值: 返回addr_的IP地址
    参  数: 无
    函数作用: 返回addr_的IP地址
*/
const char* InetAddress::ip()const
{
    return inet_ntoa(addr_.sin_addr);
}

/* 
    函数名: port()
    返回值: 返回addr_的端口号
    参  数: 无
    函数作用: 返回addr_的端口号
*/
uint16_t InetAddress::port()const
{
    return ntohs(addr_.sin_port);
}

/* 
    函数名: addr()
    返回值: 返回addr_的sockaddr地址
    参  数: 无
    函数作用: 转换 sockaddr_in -> sockaddr 的地址
*/
const struct sockaddr* InetAddress::addr()const
{
    return (struct sockaddr*)&addr_;
}

/* 
    函数名: setaddr(struct sockaddr_in clientaddr)
    返回值: 无
    参  数: struct sockaddr_in clientaddr, 传入的clientaddr变量
    函数作用: sockaddr_in 赋值给addr_
*/
void InetAddress::setaddr(struct sockaddr_in clientaddr)
{
    addr_ = clientaddr;
}